#ifndef TABFUN_H
#define TABFUN_H

#include <stdbool.h>

#include "tablesymb.h"
#include "ht.h"
#include "ll.h"

typedef ht_table tabcls;
typedef ht_table tabfun;
typedef struct Fonction Fonction;
typedef struct Class Class;

struct Fonction {
    char *nom;
    ll_list* args;
	Type ret_type;
	Class* class;
};

struct Class {
    char *nom;
	Class* parent;
	tabfun* tf;
};

// Functions on the Function datatype
char* pp_function(char*, Fonction* f);
void insp_function(Fonction *f);

// Functions on the Class datatype
char* pp_class(Class* f);
Fonction* cl_get_method(Class* f, char*);

// Functions on the function table
tabfun* tf_create();
Fonction* tf_get(tabfun*, char const* id);
void tf_add(tabfun*, char const* id, Fonction* f);
void tf_get_ret_type(tabfun*, char const* id);
void tf_set_ret_type(tabfun*, char const* id);
Fonction* tf_get_current();

// Functions on the class table
tabcls* tc_create();
Class* tc_get(tabcls*, char const* id);
void tc_add(tabcls*, char const* id, Class* f);

#endif
